
 1000  *SAVE ROM.CRC.CALC
 1010  *--------------------------------
 1020  LOCN   .EQ $00,01   ENTER DATA LOCN (L/H)
 1030  SIZE   .EQ $02,03   ENTER ROM SIZE (L/H)
 1040  AL     .EQ $04      SIMULATED 8088 REGISTERS
 1050  AH     .EQ $05
 1060  BL     .EQ $06
 1070  BH     .EQ $07
 1080  CL     .EQ $08
 1090  CH     .EQ $09
 1100  DL     .EQ $0A
 1110  DH     .EQ $0B
 1120  PTR    .EQ $0C,0D   WORK POINTER
 1130  CTR    .EQ $0E,0F   BYTE COUNTER
 1140  *--------------------------------
 1150  PRNTAX .EQ $F941
 1160  *--------------------------------
 1170         .OR $300
 1180  *--------------------------------
 1190  START  LDA LOCN     SETUP POINTER
 1200         STA PTR           TO ROM IMAGE
 1210         LDA LOCN+1
 1220         STA PTR+1
 1230  *--------------------------------
 1240         SEC          GET BYTE COUNT - 2
 1250         LDA SIZE
 1260         SBC #2
 1270         STA CTR
 1280         LDA SIZE+1
 1290         SBC #0
 1300         STA CTR+1
 1310  *--------------------------------
 1320         LDY #$FF     START CRC AT $FFFF
 1330         STY DL
 1340         STY DH
 1350         INY          Y=0
 1360         STY AH       INIT AH REG
 1370  *--------------------------------
 1380  .1     LDA (PTR),Y  GET NEXT BYTE
 1390         JSR FOLD.BYTE.INTO.CRC
 1400         INC PTR      BUMP THE WORK POINTER
 1410         BNE .2
 1420         INC PTR+1
 1430  .2     LDA CTR      DECREMENT THE BYTE COUNT
 1440         BNE .3
 1450         DEC CTR+1
 1460  .3     DEC CTR
 1470         LDA CTR      TEST IF FINISHED
 1480         ORA CTR+1
 1490         BNE .1       ...KEEP GOING
 1500         LDX DL       DISPLAY THE RESULT
 1510         LDA DH
 1520         JMP PRNTAX
 1530  *--------------------------------
 1540  FOLD.BYTE.INTO.CRC
 1550         EOR DH
 1560         STA DH
 1570         STA AL
 1580         JSR ROLAX4   8088 "ROL AX,C"
 1590         JSR EORAD    8088 "EOR DX,AX"
 1600         JSR ROLAX1   8088 "ROL AX,1"
 1610         LDA DH       SWAP BYTES IN REG-D
 1620         LDX DL
 1630         STX DH
 1640         STA DL
 1650         JSR EORAD    8088 "EOR DX,AX"
 1660         JSR RORAX4   8088 "ROR AX,C"
 1670         LDA AL
 1680         AND #$E0
 1690         STA AL
 1700         JSR EORAD    8088 "EOR DX,AX"
 1710         JSR RORAX1   8088 "ROR AX,1"
 1720         LDA AL
 1730         EOR DH
 1740         STA DH
 1750         RTS
 1760  *--------------------------------
 1770  *   SIMULATE 8088 "ROL AX,C"
 1780  *--------------------------------
 1790  ROLAX4 JSR ROLAX1   SHIFT 4 BITS BY SHIFTING
 1800         JSR ROLAX1        1 BIT 4 TIMES
 1810         JSR ROLAX1
 1820  *--------------------------------
 1830  *   SIMULATE 8088 "ROL AX,1"
 1840  *--------------------------------
 1850  ROLAX1 LDA AL       8088 "ROL" SHIFTS END AROUND
 1860         ASL          WITHOUT LEAVING A BIT IN CARRY
 1870         ROL AH
 1880         BCC .1       6502 DOES LEAVE A BIT IN CARRY,
 1890         ORA #$01     SO LETS MERGE CARRY IN HERE.
 1900  .1     STA AL
 1910         RTS
 1920  *--------------------------------
 1930  *   SIMULATE 8088 "ROR AX,C"
 1940  *--------------------------------
 1950  RORAX4 JSR RORAX1   SHIFT 4 BITS BY SHIFTING
 1960         JSR RORAX1        1 BIT 4 TIMES
 1970         JSR RORAX1
 1980  *--------------------------------
 1990  *   SIMULATE 8088 "ROR AX,1"
 2000  *--------------------------------
 2010  RORAX1 LDA AH       8088 "ROR" SHIFTS END AROUND
 2020         LSR          WITHOUT LEAVING A BIT IN CARRY
 2030         ROR AL
 2040         BCC .1       6502 DOES LEAVE A BIT IN CARRY,
 2050         ORA #$80     SO LETS MERGE CARRY IN HERE.
 2060  .1     STA AH
 2070         RTS
 2080  *--------------------------------
 2090  *   SIMULATE 8088 "EOR DX,AX"
 2100  *--------------------------------
 2110  EORAD  LDA AL
 2120         EOR DL
 2130         STA DL
 2140         LDA AH
 2150         EOR DH
 2160         STA DH
 2170         RTS
 2180  *--------------------------------

